home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / dev / e / udf.lha / testwrite.e < prev    next >
Encoding:
Text File  |  2000-01-28  |  3.9 KB  |  161 lines

  1. /***************************************************************************
  2. **                                                                        **
  3. **  Simple example of a UDF archive                                       **
  4. **  ©2000 M&F Software Corporation                                        **
  5. **  All Right Reserved                                                    **
  6. **                                                                        **
  7. **  AmigaE 3.3                                                            **
  8. **                                                                        **
  9. **  $VER: UDF example 1.0.0 (27.01.00)                                    **
  10. **                                                                        **
  11. ***************************************************************************/
  12.  
  13. /*
  14.  
  15. We are going to create this tree of chunks:
  16.  
  17. +------------+
  18. |'level 1'   |
  19. |2 metachunks|
  20. +------------+
  21. +------------+
  22. +------------+
  23.       |
  24.       |
  25. +------------+   +------------+   +------------+   +------------+
  26. |'level 2a'  |   |'level 2b'  |   |'level 2c'  |   |'level 2d'  |
  27. |0 metachunks|-- |0 metachunks|---|1 metachunk |---|0 metachunks|
  28. +------------+   +------------+   +------------+   +------------+
  29.       |                           +------------+          |
  30.       |                                                   | 
  31. +------------+                                     +------------+   +------------+
  32. |'level 3a1' |                                     |'level 3d1  |   |'level 3d2' |
  33. |0 metachunks|                                     |2 metachunks|---|0 metachunks|
  34. +------------+                                     +------------+   +------------+
  35.                                                    +------------+
  36.                                                    +------------+
  37.  
  38. More complex trees can be easily created.
  39.  
  40. No error checking is done.
  41.  
  42. */
  43.  
  44. OPT OSVERSION=37
  45. OPT PREPROCESS
  46. OPT REG=3
  47.  
  48. MODULE  'M&F/udf'
  49.  
  50. #define filename 'RAM:archive1.udf'
  51.  
  52. PROC main() HANDLE
  53.   
  54.   DEF lib=NIL:PTR TO udf, len=0, err=0
  55.   DEF ck=NIL:PTR TO ck
  56.   
  57.   NEW lib.new(filename)
  58.  
  59.   IF lib=NIL THEN Raise("ERR")
  60.  
  61.   /* First chunk of the tree. You cannot add other chunks 
  62.      on this level as they won't be reacheable. */
  63.      
  64.   ck:= lib.pushlevel([
  65.     CK_ID, ID_TEXT,
  66.     CK_SIZE, SIZE_UNKNOWN,
  67.     ->CK_MASK, XPK_COMPRESSION_MODE,
  68.     CK_XPK_METHOD, 'FEAL',
  69.     CK_XPK_MODE, 60,
  70.     CK_XPK_PASSWORD, TRUE,
  71.     0])
  72.   len, err := ck.store('level 1')
  73.   
  74.   /* Some optional metachunks for the first chunk */
  75.   ck.addmeta([
  76.     CK_ID, ID_TEXT,
  77.     CK_NUMBER, 1,
  78.     CK_SIZE, 12,
  79.     CK_BUFFER, 'A metachunk',
  80.     0])
  81.   
  82.   ck.addmeta([
  83.     CK_ID, ID_TEXT,
  84.     CK_NUMBER, 2,
  85.     CK_SIZE, 17,
  86.     CK_BUFFER, 'Another metachunk',
  87.     0])
  88.  
  89.   /* Creating second level */
  90.   ck := lib.pushlevel([
  91.     CK_ID, ID_TEXT,0])
  92.   ck.store('Level 2a')
  93.  
  94.   /* Creating thrird level */
  95.   ck := lib.pushlevel([
  96.     CK_ID, ID_TEXT,0])
  97.   ck.store('Level 3')
  98.  
  99.   lib.poplevel()
  100.   
  101.   /* Adding new chunks to the second level again */
  102.   ck := lib.pushchunk([
  103.     CK_ID, ID_TEXT,
  104.     0])
  105.   ck.store('Level 2b')
  106.  
  107.   ck := lib.pushchunk([
  108.     CK_ID, ID_TEXT,0])
  109.   ck.store('Level 2c')
  110.   
  111.   ck.addmeta([
  112.     CK_ID, ID_TEXT,
  113.     CK_NUMBER, 1,
  114.     CK_BUFFER, 'A metachunk for chunk 2c',
  115.     CK_SIZE, STRLEN+1,
  116.     0])
  117.  
  118.   ck := lib.pushchunk([
  119.     CK_ID, ID_TEXT,0])
  120.   ck.store('Level 2d')
  121.  
  122.   /* Adding a sub level to 'level 2d' chunk */
  123.   ck := lib.pushlevel([
  124.     CK_ID, ID_TEXT,0])
  125.   ck.store('Level 3d1')
  126.   
  127.   ck.addmeta([
  128.     CK_ID, ID_TEXT,
  129.     CK_NUMBER, 1,
  130.     CK_BUFFER, 'Metachunk 3d1-1',
  131.     CK_SIZE, STRLEN+1,
  132.     0])
  133.  
  134.   ck.addmeta([
  135.     CK_ID, ID_TEXT,
  136.     CK_NUMBER, 2,
  137.     CK_BUFFER, 'Metachunk 3d1-2',
  138.     CK_SIZE, STRLEN+1,
  139.     0])
  140.  
  141.   ck := lib.pushchunk([
  142.     CK_ID, ID_TEXT, 0])
  143.   ck.store('Level 3d2')
  144.  
  145.   lib.poplevel()
  146.  
  147.   lib.poplevel()
  148.   lib.poplevel()
  149.   
  150.   lib.save()
  151.   
  152.   END lib
  153.  
  154. EXCEPT DO
  155.  
  156.   IF exception
  157.     PrintF('An error occured\n')
  158.   ENDIF
  159.  
  160. ENDPROC
  161.